import express from 'express'
import cors from 'cors'
import bcrypt from 'bcryptjs'
import jwt from 'jsonwebtoken'

const app = express()
const PORT = 3000
const JWT_SECRET = 'easy-go-jwt-secret-2024'

// 中间件
app.use(cors())
app.use(express.json())

// 模拟数据库
let users = [
    {
        id: 1,
        username: 'admin',
        password: '$2a$10$8K1p/a0dRTlB0d.8X8X8X.8X8X8X8X8X8X8X8X8X8X8X8X8X8X', // 123456
        email: 'admin@easygo.com',
        createdAt: new Date().toISOString()
    }
]

// 生成JWT令牌
function generateToken(user) {
    return jwt.sign(
        { id: user.id, username: user.username },
        JWT_SECRET,
        { expiresIn: '24h' }
    )
}

// 注册接口
app.post('/api/register', async (req, res) => {
    try {
        const { username, password, email } = req.body

        if (!username || !password) {
            return res.status(400).json({ error: '用户名和密码不能为空' })
        }

        if (username.length < 3) {
            return res.status(400).json({ error: '用户名至少3位字符' })
        }

        if (password.length < 6) {
            return res.status(400).json({ error: '密码至少6位字符' })
        }

        // 检查用户是否存在
        const existingUser = users.find(user => user.username === username)
        if (existingUser) {
            return res.status(400).json({ error: '用户名已存在' })
        }

        // 加密密码
        const hashedPassword = await bcrypt.hash(password, 10)

        // 创建新用户
        const newUser = {
            id: users.length + 1,
            username,
            password: hashedPassword,
            email: email || '',
            createdAt: new Date().toISOString()
        }

        users.push(newUser)

        // 生成token
        const token = generateToken(newUser)

        res.status(201).json({
            message: '注册成功',
            user: {
                id: newUser.id,
                username: newUser.username,
                email: newUser.email
            },
            token
        })

    } catch (error) {
        console.error('注册错误:', error)
        res.status(500).json({ error: '服务器内部错误' })
    }
})

// 登录接口
app.post('/api/login', async (req, res) => {
    try {
        const { username, password } = req.body

        if (!username || !password) {
            return res.status(400).json({ error: '用户名和密码不能为空' })
        }

        // 查找用户
        const user = users.find(user => user.username === username)
        if (!user) {
            return res.status(400).json({ error: '用户名或密码错误' })
        }

        // 验证密码
        const validPassword = await bcrypt.compare(password, user.password)
        if (!validPassword) {
            return res.status(400).json({ error: '用户名或密码错误' })
        }

        // 生成token
        const token = generateToken(user)

        res.json({
            message: '登录成功',
            user: {
                id: user.id,
                username: user.username,
                email: user.email
            },
            token
        })

    } catch (error) {
        console.error('登录错误:', error)
        res.status(500).json({ error: '服务器内部错误' })
    }
})

// 健康检查
app.get('/api/health', (req, res) => {
    res.json({
        status: 'OK',
        message: 'Easy Go 后端服务运行正常',
        timestamp: new Date().toISOString(),
        userCount: users.length
    })
})

// 获取用户列表（需要认证）
app.get('/api/users', (req, res) => {
    const userList = users.map(user => ({
        id: user.id,
        username: user.username,
        email: user.email,
        createdAt: user.createdAt
    }))

    res.json({ users: userList })
})

// 启动服务器
app.listen(PORT, () => {
    console.log(`🚀 Easy Go 后端服务器运行在 http://localhost:${PORT}`)
    console.log(`✅ 健康检查: http://localhost:${PORT}/api/health`)
    console.log(`📊 当前用户数量: ${users.length}`)
    console.log(`👤 默认测试账号: admin / 123456`)
})